#ifndef __TRAY_INTERFACE_H__
#define __TRAY_INTERFACE_H__
#include <QString>
#include <QObject>

class TrayInterface : public QObject
{
    Q_OBJECT
public:
    TrayInterface();
/*************************************************
**Function:        // 函数名称
**Description:    // 函数功能描述
**Input:          // 输入参数说明，包括每个参数的作用、取值说明
**Output:         // 对输出参数的说明
**Return:         // 函数返回值的说明
**Others:         // 其它说明
*************************************************/
/*************************************************
声明：QString getCategory()
描述：描述Item的类别
返回值：
    ApplicationStatus：该项描述通用应用程序的状态，例如媒体播放器的当前状态。在无法知道项的类别的情况下，例如当从另一个不兼容或模拟系统代理项时，ApplicationStatus可以用作合理的默认回退。
    Communications（通信）：该项描述面向通信的应用程序的状态，如即时消息或电子邮件客户端。
    SystemServices（系统服务）：该项描述了用户未将系统服务视为独立应用程序的服务，例如磁盘索引服务活动的指示器。
    Hardware（硬件）：该项描述特定硬件的状态和控制，例如电池电量指示器或声卡音量控制。
*************************************************/
QString getCategory();

/*************************************************
声明：QString getId()
描述：该名称对于该应用程序来说应该是唯一的，并且在会话之间保持一致，例如应用程序名称本身。
返回值：Item ID
*************************************************/
QString getId();

/*************************************************
声明：QString getTitle()
描述：这是一个描述应用程序的名称，它可以比Id更具描述性。
返回值：Item Title
*************************************************/
QString getTitle();

/*************************************************
声明：QString getStatus()
描述：描述Item或关联应用程序的状态。
返回值：
    Passive：Item不会向用户传达重要信息，它可以被视为“空闲”状态，并且很可能可视化会选择隐藏它。
    Active：Item处于活动状态，更重要的是项目将以某种方式显示给用户。
    NeedsAttention：Item为用户提供了非常重要的信息，例如电池电量耗尽，并希望鼓励用户直接干预。可视化应该以某种方式强调“需要注意”状态的项目。
*************************************************/
QString getStatus();

/*************************************************
声明：uint32_t getWindowId()
描述：它是窗口的窗口系统相关标识符，应用程序可以通过此属性选择其中一个窗口可用，或者如果不感兴趣，只需设置0。
返回值：Itme WId
*************************************************/
uint32_t getWindowId();

/*************************************************
声明：QIcon getIcon()
描述：获取托盘图标，该图已经和overlayIcon叠加，并且根据主题做了反白处理，前端可直接setIcon使用
返回值：托盘图标
*************************************************/
QIcon getIcon();

/*************************************************
声明：QString getIconName()
描述：获取图标名称  
返回值：图标名
*************************************************/
QString getIconName();

/*************************************************
声明：QString getIconThemePath()
描述：获取主图图标路径
返回值：主题图标的路径
*************************************************/
QString getIconThemePath();

/*************************************************
声明：QIcon getAttentionIcon()
描述：获取托盘Attention状态的图标，该图已经和overlayIcon叠加，并且根据主题做了反白处理，前端可直接setIcon使用
返回值：
*************************************************/
QIcon getAttentionIcon();

/*************************************************
声明：QString getAttentionIconName()
描述：获取Attention状态的图标名  
返回值：Attention状态的图标名
*************************************************/
QString getAttentionIconName();

/*************************************************
声明：QString getAttentionMovieName()
描述：Item还可以指定与RequestingAttention状态关联的动画。这应该是符合Freedesktop的图标名称或完整路径。可视化可以在Movie或AttentionIconPixmap（或两者都不使用）之间自由选择。
返回值：?????
*************************************************/
QString getAttentionMovieName();

/*************************************************
声明：QIcon getToolTipIcon();
描述：获取tooltp图标。优先使用image图标数据显示，若Image为空则使用IconName显示。
返回值：tooltp图标
*************************************************/
QIcon getToolTipIcon();

/*************************************************
声明：QString getToolTipTitle()
描述：获取toolTip的标题。此标题是最为常用的工具提示
返回值：ToolTip字符串
*************************************************/
QString getToolTipTitle();

/*************************************************
声明：QString getToolTipSubTitle()
描述：Tooltip的描述性文本。它还可以包含HTML标记语言的子集
返回值：Tooltip的描述性文本
*************************************************/
QString getToolTipSubTitle();

/*************************************************
声明：bool getItemIsMenu()
描述：Item支持上下文菜单，前端应该倾向于显示菜单或发送ContextMenu()
返回值：
    true：支持上下文菜单
    false：不支持

声明：QMenu getMenu()
描述：
返回值：OBJECTPATH：应该实现com.canonical.dbusmenu接口的对象的DBus路径
*************************************************/
bool getItemIsMenu();

public:
/*************************************************
声明：void proxyContextMenu(int x,int y)
描述：转发鼠标右键事件。若前端不显示右键菜单，则应该把事件传给应用
*************************************************/
void proxyContextMenu(int x,int y);
/*************************************************
声明：void proxyActivate(int x,int y)
描述：转发鼠标左键事件。前端不处理鼠标左键事件，需要传给应用
*************************************************/
void proxyActivate(int x,int y);
/*************************************************
声明：void proxySecondaryActivate(int x,int y)
描述：转发鼠标中键事件。前端不处理鼠标中键事件，需要传给应用
*************************************************/
void proxySecondaryActivate(int x,int y);
/*************************************************
声明：void proxyScroll(int delta, QString orientation)
描述：转发鼠标滚轮事件。前端不处理鼠标滚轮事件，需要传给应用
*************************************************/
void proxyScroll(int delta, QString orientation);

signals:
    void titleChanged();
    void iconsChanged();
    void toolTipChanged();
    void statusChanged();

private:
    

};

#endif
